#!/bin/bash

#Verifica se houve erro na Saida da Função
VerificaSaida(){
	#Verifica se o arquivo existe e se não está vazio
	if [ -s erro.txt ]; then
		echo $(date +"%d %B %Y %H:%M:%S [ERRO] ")$erro$(cat erro.txt)
		zenity --error --text="Erro!!\n$erro"
	   Menu
	   exit
	else
      echo $(date +"%d %B %Y %H:%M:%S [SAIDA] ")$saida      
   fi
}

#Função para cálculo do tempo
CalcTempo(){
   temp=3600000000000
	hora=$(($tempoTotal / $temp))
	tempoTotal=$(($tempoTotal - $hora * $temp))

	temp=60000000000
	min=$(($tempoTotal / $temp))
	tempoTotal=$(($tempoTotal - $min * $temp))
	
	temp=1000000000
	seg=$(($tempoTotal / $temp))
	tempoTotal=$(($tempoTotal - $seg * $temp))
	
	temp=1000000
	mseg=$(($tempoTotal / $temp))
	
   echo $(date +"%d %B %Y %H:%M:%S [$opcao] Tempo Total: "$hora"h "$min"m "$seg","$mseg"s")
}


#Funcao que executa o Pré-Processamento
PreProcessar(){
	arquivo=$(zenity	--title "Base para Pré-Processamento" --file-selection)
	if [ "$arquivo" != "" ]; then
		echo $(date +"%d %B %Y %H:%M:%S [$opcao] Base Pré-Processamento: ")$arquivo
		baseProcessada=${arquivo%.*}
		baseProcessada=$baseProcessada"Processada.db"
		../estSecundaria $arquivo $baseProcessada > saida.txt 2> erro.txt | zenity --text="Pré-Processando..." --progress --pulsate 
		
		#Mensagens de saida
		saida="Base Processada: $baseProcessada"
		erro="Processndo Base."

		VerificaSaida
	else
		echo $(date +"%d %B %Y %H:%M:%S [$opcao] Cancelado.")
	fi
	Menu
}

#Gera Modelo de Covariancia
GeraMC(){
	#Nome do Modelo
	modCov=${rna%.*}
	modCov=$modCov".cm"
	
	#Removendo modelo para recriar
	rm $modCov

	#Gerar Modelo De Covariancia da Entrada
	#my.cm - Modelo de Covariancia gerado a partir da entrada (tutorial.sto - STOCKHOLM)
	antes="$(date +%s%N)"
	cmbuild $modCov $rna > saida.txt 2> erro.txt | zenity --text="Gerando Modelo de Covariância..." --progress --pulsate  --percentage=0 --auto-close 
	depois="$(date +%s%N)"
	tCmbuild=$(($depois-$antes))
	tempoTotal=$(($tempoTotal + $tCmbuild))

	#Mensagens de saida
	saida="Modelo de Covariância gerado: $modCov"
	erro="Gerando Modelo de Covariância."
}

#Filtra Base de Dados para Otimização da Busca
FiltraBD(){
	#INSERIR AQUI A FUNCAO DO FILTRO DA BASE DE DADOS !!!
	echo $(date +"%d %B %Y %H:%M:%S [$opcao] EFETUAR FILTRO DA BASE PARA EFETUAR A BUSCA")
	
	antes="$(date +%s%N)"
	../extraiEntrada $rna $rnaExtraido > saida.txt 2> erro.txt
	(perl ../filtraBaseDados.pl $rnaExtraido $baseEstSecundaria $base > saida.txt 2> erro.txt)  > >(zenity --progress --pulsate --percentage=0 --title "$opcao" --text  "Filtrando ncRNAs...") 
	depois="$(date +%s%N)"
	tFiltro=$(($depois-$antes))
	tempoTotal=$(($tempoTotal + $tFiltro))

	saida="Efetuado Filtro de ncRNA: $rnaExtraido."
	erro="Efetuando Filtro de ncRNA."
}

#Efetua a busca do ncRNA na Base
BuscaInfernal(){
	#Busca pelo RNA (my.cm) na Base de Dados (tutorial.db)
	#Colocar a saida em um arquivo
	#cmsearch -E 10 $modCov $base > saida.txt 2> erro.txt  | zenity --text="Buscando ncRNAs..." --progress --pulsate --percentage=0 --auto-close

	antes="$(date +%s%N)"
	(cmsearch $modCov $base > ncRNA.out 2> erro.txt)  > >(zenity --progress --pulsate --percentage=0 --title "$opcao" --text  "Buscando ncRNAs...") 
	depois="$(date +%s%N)"
	tCmsearch=$(($depois-$antes))
	tempoTotal=$(($tempoTotal + $tCmsearch))

	saida="Efetuado Busca de ncRNA <ncRNA.out>."
	erro="Efetuando Busca de ncRNA."

	if [ -s ncRNA.out ]; then
		zenity --title="File Info" --text-info --filename ncRNA.out --height 400 --width 500

	fi
}

#Busca de ncRNA
BuscancRNA(){
	rna=$(zenity --title "Sequência de Entrada" --file-selection)

	if [ "$rna" != "" ]
	then
		echo $(date +"%d %B %Y %H:%M:%S [$opcao] Arquivo ncRNA: ")$rna
		
		#Caso cancele sai do while
		busca=0

		while [ $busca -ne 1 ] 
		do
			tempoTotal=0;
			busca=1
        	base=$(zenity --title "Base de Dados para Busca" --file-selection)

			if [ "$base" != "" ]; then
				echo $(date +"%d %B %Y %H:%M:%S [$opcao] Base: ")$base

				#Filtro da Base de Dados
				if [ "$opcao" = "Buscar ncRNA Otimizada" ]
				then
					echo $(date +"%d %B %Y %H:%M:%S [$opcao] Filtrar Base de Dados.")
					#renomeando base
    				baseEstSecundaria=$base;
	    			base=${base%.*}
		    		base=$base"Filtrada.db"
					
					rnaExtraido=${rna%.*}
   				rnaExtraido=$rnaExtraido".ext"

					FiltraBD
					VerificaSaida
				fi

				#Gerando Modelo de Covariância
				echo $(date +"%d %B %Y %H:%M:%S [$opcao] Gerar Modelo de Covariância.")
				GeraMC
				VerificaSaida
				
				#Busca - Infernal
				echo $(date +"%d %B %Y %H:%M:%S [$opcao] Buscar ncRNA na Base de Dados.")
				BuscaInfernal
				VerificaSaida

				CalcTempo

				#Deseja efetuar Busca em Nova Base de Dados?
				busca=$(zenity	--question \
									--title "Sistema de Busca de ncRNAs" \
									--text "Deseja buscar em nova base? \nClique em (OK) para efetuar busca em uma nova base.")
				busca=$?
			else
				echo $(date +"%d %B %Y %H:%M:%S [$opcao] Cancelado.")
			fi
      done
		echo $(date +"%d %B %Y %H:%M:%S [$opcao] Finalizar Busca.")
	else
		echo $(date +"%d %B %Y %H:%M:%S [$opcao] Cancelado.")
	fi		
	Menu
}

#Tela Inicial
Menu(){
	opcao=$( zenity	--title "Sistema de Busca de ncRNAs" \
							--text "Selecione a opção desejada:"\
							--height 215 \
							--width 300 \
							--list --column "" \
								"Pré-Processar Base de Dados" \
								"Buscar ncRNA Otimizada"\
								"Buscar ncRNA Infernal")

	if [ "$opcao" != "" ]; then
		 echo $(date +"%d %B %Y %H:%M:%S [OPÇÃO] ") " ********** " $opcao " ********** "
	fi

	case $opcao in 
    	"Pré-Processar Base de Dados")	PreProcessar;;
    	"Buscar ncRNA Otimizada")			BuscancRNA;;
		"Buscar ncRNA Infernal")			BuscancRNA;;
    	*) echo $(date +"%d %B %Y %H:%M:%S - Encerrando Processo de Busca de ncRNA...");;
	esac
}

#Inicio
clear
echo $(date +"%d %B %Y %H:%M:%S - Iniciando Processo de Busca de ncRNA...")
Menu
